"""
什么是建造者模式，我们为什么而需要建造者模式？
建造者模式（Builder Pattern）使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式
属于创建型模式，它提供了一种创建对象的最佳方式。
这是一个很官方的定义，有人看完之后肯定一脸懵逼，OK，让我们细细分析一下这句话
使用多个简单的对象一步一步构建成一个复杂的对象。
我们生产一部手机，要用到屏幕，cpu，电源等，生产一部电视同样需要生产手机中用到的一些器件；
我们生产一栋大楼和一所小别墅，同样要用共同的对象。
我们生产的对象是复杂的，但在组装之前都是简单的组件（对象）
我们的建造这模式也是同样的意图。
"""
"""
首先我们得设计一个用得着建造者模式的场景。OK，我想到了一个，我们要生产一部手机，需要很多零件。
汗！我哪知道生产手机需要啥。
不要紧，我们把这个过程抽象一下。
我们生产一部手机，需要A，B两个组件，我们开始吧
"""
class Componet():
    def __init__(self):
        pass

class A(Componet):
    def __init__(self):
        pass
    def introself(self):
        print('I am A')

class B(Componet):
    def __init__(self):
        pass
    def introself(self):
        print('I am B')

"""
组件生产完毕，接下来拼装
"""

class Mobile():
    def addComponet(self, componetA, componetB):
        self.componetA = componetA
        self.componetB = componetB

# mobile = Mobile()
# mobile.addComponet(A(), B())
# mobile.componetA.introself()
# mobile.componetB.introself()
'''
OK,现在我们有了一部手机，它由A、B俩个部分组成,这是一部iOS手机,现在我们想要一部android手机
。假设他们只有第二个组件不同。那我们只需要写成mobile.addComponet(A(), C())就可以了（当然我们也还要线
创建一个C类）
到现在，我们应经领悟了建造者模式的核心了，那就是把本来不属于这个复杂对象的能力，通过一些手段，赋予给这个
对象。
其实这和我们现实世界中由世界各地的工厂生产配件，然后再组装成一个复杂可用的商品（飞机，手机，其实想想
万事万物都是一样的，人也不例外，其实我们这一章就是拆分功能）是一个道理。
等等，我刚刚提到了什么？没没错，就是 “工厂”。是的我们学完这一章，以后我们再建立工厂的时候就不要太复杂喽，
我们的工厂就只生产具备一个功能的产品就好了，复杂的产品让建造者（或建造者工厂）去组装吧。
'''